package com.appspot.bs24event.util;

import java.security.Principal;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

/**
 * Googleアカウントに関するユーティリティクラス。
 *
 * @version $Id: GoogleAccountUtil.java 172 2011-08-11 04:44:56Z bs24event@gmail.com $
 *
 */
public class GoogleAccountUtil {

    /** ログ */
    protected static final Logger logger = Logger.getLogger(GoogleAccountUtil.class.getName());

    /** リソースバンドル */
    private static ResourceBundle settingProperties = ResourceBundle.getBundle("setting");

    /**
     * googleアカウントにログインしているかを判定する。
     *
     * @param request
     * @return ログインしていればtrue, していなければfalse
     */
    public static boolean isGoogleLogin(HttpServletRequest request) {

        UserService userService = UserServiceFactory.getUserService();
        Principal principal = request.getUserPrincipal();

        if (principal == null || userService.isUserLoggedIn() == false) {
            if (logger.isDebugEnabled()) logger.debug("googleアカウントでログインしていません (Do not sign in with google account)");
            return false;
        }
        if (logger.isDebugEnabled()) logger.debug("googleアカウントでログインしています (Sign in with google account)");
        return true;
    }

    /**
     * 許可しているgoogleアカウントかを判定する。
     *
     * @param request
     * @return 許可しているgoogleアカウントならtrue, 許可していないgoogleアカウントならfalse
     */
    public static boolean isArrowGoogleAccount(HttpServletRequest request) {
        if ( isGoogleLogin(request) ) {
            String[] arrowUsers = settingProperties.getString("google.guest.account.id").split(",");
            User user = UserServiceFactory.getUserService().getCurrentUser();
            for ( String arrowUser : arrowUsers ) {
                if ( arrowUser.equals(user.getEmail()) ) {
                    if (logger.isDebugEnabled()) logger.debug("許可しているgoogleアカウントです (Google account that is allowed)");
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * googleアカウントが管理者か判定する。
     *
     * @param request
     * @return 管理者ならばtrue, ちがければfalse
     */
    public static boolean isGoogleAdmin(HttpServletRequest request) {

        UserService userService = UserServiceFactory.getUserService();
        Principal principal = request.getUserPrincipal();

        if (principal == null || userService.isUserAdmin() == false) {
            if (logger.isDebugEnabled()) logger.debug("管理者ではありません (No administrator)");
            return false;
        }
        if (logger.isDebugEnabled()) logger.debug("菅理者です (Administrator)");
        return true;
    }
}
